home *** CD-ROM | disk | FTP | other *** search
- /*
- * TSyntaxMemoParser Script
- * ------------------------
- *
- * Author : David Brock / Tony Tanzillo
- * Date : October 1997
- * Language: LISP
- */
-
- //--------------------------------------------------------------------------------------------------------------------
- //
- //
- //
- // Macro definitions. Parameters may be specified and the replacement text terminates with the end of
- // line (watch trailing blanks).
- //
- #define ct_DEFAULT 0
- #define ct_COMMENT_LINE 1
- #define ct_COMMENT_STAR 2
- #define ct_IDENTIFIER 3
- #define ct_STRING 4
- #define ct_NUMBER 5
- #define ct_COMMENT 6
- #define ct_OPERATOR 7
- #define ct_RESERVED 8
- #define ct_MISC 11
- #define ct_KEYWORD 12
-
- #define _non_alpha_ '[^_A-Za-z0-9]'
- #define _all_chars_ '[\x00-\xFF]'
- #define _no_chars_ '[]'
- #define _dont_care_ _all_chars_
- #define _DEFAULT_BACKGROUND clNavy
- #define _DEFAULT_FOREGROUND clWhite
-
- // LISP-specific
-
- #define _delimiter_ '[ ()\'"\n\x00\x09\x27]'
-
-
-
- //--------------------------------------------------------------------------------------------------------------------
- //
- // %%language section
- //
- // Header section. Describes the textual name of the language, case sensitivity and options used by the language.
- //
- %%language
- Name = 'AutoLISP'
- Case = __INSENSITIVE
- Options = __DEFAULT_OPTIONS
- WordWrapColumn = _EDGE
- Gutter = _DEFAULT_GUTTER
- Anchor = _DEFAULT_START_ANCHOR
- ExampleText = '(defun GetAttrib (blocks tag val / e i ss fltr rslt)\n\
- \áá (if (eq tag "") (setq tag "*"))\n\
- \áá (setq fltr (list \'(0 . "insert") \'(66 . 1)))\n\
- \áá (cond\n\
- \ááááá (á (not (setq ss (ssget "x" fltr))) nil)\n\
- \ááááá (t (setq i (sslength ss)))\n\
- \áá )\n\
- \)'
-
- EditableStyles ('Comment', ct_COMMENT),
- ('String', ct_STRING),
- ('Reserved word', ct_KEYWORD),
- ('Operator', ct_MISC),
- ('Identifier', ct_IDENTIFIER),
- ('Number', ct_NUMBER),
- ('Default', ct_DEFAULT)
-
- //--------------------------------------------------------------------------------------------------------------------
- //
- // %%words section
- //
- // Used to specify simple languge keywords. These are constant value lexemes that always contain the same characters
- // and only require the end style to be specified. The words present here will always be tried first. If they fail
- // then the entries in the %%tokens section will be allowed to try a match.
- //
- // %%words table entries have 3 columns:
- // Column 1 Quoted string giving the characters that make up the word
- // Column 2 Quoted string that specifies how the word is terminated
- // Column 3 Token value returned when word is recognised
- //
- %%words
- '\'' _dont_care_ ct_MISC
- '(' _dont_care_ ct_MISC
- ')' _dont_care_ ct_MISC
- '.' _dont_care_ ct_MISC
- ';|' _dont_care_ ct_COMMENT_STAR
- ';' _dont_care_ ct_COMMENT_LINE
- '-' _delimiter_ ct_KEYWORD
- '*' _delimiter_ ct_KEYWORD
- '*error*' _delimiter_ ct_KEYWORD
- '/' _delimiter_ ct_KEYWORD
- '/=' _delimiter_ ct_KEYWORD
- '_ver' _delimiter_ ct_KEYWORD
- '~' _delimiter_ ct_KEYWORD
- '+' _delimiter_ ct_KEYWORD
- '<' _delimiter_ ct_KEYWORD
- '<=' _delimiter_ ct_KEYWORD
- '=' _delimiter_ ct_KEYWORD
- '>' _delimiter_ ct_KEYWORD
- '>=' _delimiter_ ct_KEYWORD
- '1-' _delimiter_ ct_KEYWORD
- '1+' _delimiter_ ct_KEYWORD
- 'abs' _delimiter_ ct_KEYWORD
- 'acad_colordlg' _delimiter_ ct_KEYWORD
- 'acad_strlsort' _delimiter_ ct_KEYWORD
- 'action_tile' _delimiter_ ct_KEYWORD
- 'add_list' _delimiter_ ct_KEYWORD
- 'ads' _delimiter_ ct_KEYWORD
- 'alert' _delimiter_ ct_KEYWORD
- 'alloc' _delimiter_ ct_KEYWORD
- 'and' _delimiter_ ct_KEYWORD
- 'angle' _delimiter_ ct_KEYWORD
- 'angtof' _delimiter_ ct_KEYWORD
- 'angtos' _delimiter_ ct_KEYWORD
- 'append' _delimiter_ ct_KEYWORD
- 'apply' _delimiter_ ct_KEYWORD
- 'arx' _delimiter_ ct_KEYWORD
- 'arxload' _delimiter_ ct_KEYWORD
- 'arxunload' _delimiter_ ct_KEYWORD
- 'ascii' _delimiter_ ct_KEYWORD
- 'assoc' _delimiter_ ct_KEYWORD
- 'atan' _delimiter_ ct_KEYWORD
- 'atof' _delimiter_ ct_KEYWORD
- 'atoi' _delimiter_ ct_KEYWORD
- 'atom' _delimiter_ ct_KEYWORD
- 'atoms-family' _delimiter_ ct_KEYWORD
- 'bhatch' _delimiter_ ct_KEYWORD
- 'bherrs' _delimiter_ ct_KEYWORD
- 'boole' _delimiter_ ct_KEYWORD
- 'boundp' _delimiter_ ct_KEYWORD
- 'bpoly' _delimiter_ ct_KEYWORD
- 'c:ddim' _delimiter_ ct_KEYWORD
- 'c:psdrag' _delimiter_ ct_KEYWORD
- 'c:psfill' _delimiter_ ct_KEYWORD
- 'c:psin' _delimiter_ ct_KEYWORD
- 'caaaar' _delimiter_ ct_KEYWORD
- 'caaadr' _delimiter_ ct_KEYWORD
- 'caaar' _delimiter_ ct_KEYWORD
- 'caadar' _delimiter_ ct_KEYWORD
- 'caaddr' _delimiter_ ct_KEYWORD
- 'caadr' _delimiter_ ct_KEYWORD
- 'caar' _delimiter_ ct_KEYWORD
- 'cadaar' _delimiter_ ct_KEYWORD
- 'cadadr' _delimiter_ ct_KEYWORD
- 'cadar' _delimiter_ ct_KEYWORD
- 'caddar' _delimiter_ ct_KEYWORD
- 'cadddr' _delimiter_ ct_KEYWORD
- 'caddr' _delimiter_ ct_KEYWORD
- 'cadr' _delimiter_ ct_KEYWORD
- 'car' _delimiter_ ct_KEYWORD
- 'cdaaar' _delimiter_ ct_KEYWORD
- 'cdaadr' _delimiter_ ct_KEYWORD
- 'cdaar' _delimiter_ ct_KEYWORD
- 'cdadar' _delimiter_ ct_KEYWORD
- 'cdaddr' _delimiter_ ct_KEYWORD
- 'cdadr' _delimiter_ ct_KEYWORD
- 'cdar' _delimiter_ ct_KEYWORD
- 'cddaar' _delimiter_ ct_KEYWORD
- 'cddadr' _delimiter_ ct_KEYWORD
- 'cddar' _delimiter_ ct_KEYWORD
- 'cdddar' _delimiter_ ct_KEYWORD
- 'cddddr' _delimiter_ ct_KEYWORD
- 'cdddr' _delimiter_ ct_KEYWORD
- 'cddr' _delimiter_ ct_KEYWORD
- 'cdr' _delimiter_ ct_KEYWORD
- 'chr' _delimiter_ ct_KEYWORD
- 'client_data_tile' _delimiter_ ct_KEYWORD
- 'close' _delimiter_ ct_KEYWORD
- 'command' _delimiter_ ct_KEYWORD
- 'cond' _delimiter_ ct_KEYWORD
- 'cons' _delimiter_ ct_KEYWORD
- 'cos' _delimiter_ ct_KEYWORD
- 'cvunit' _delimiter_ ct_KEYWORD
- 'defun' _delimiter_ ct_KEYWORD
- 'dictadd' _delimiter_ ct_KEYWORD
- 'dictnext' _delimiter_ ct_KEYWORD
- 'dictremove' _delimiter_ ct_KEYWORD
- 'dictrename' _delimiter_ ct_KEYWORD
- 'dictsearch' _delimiter_ ct_KEYWORD
- 'dimx_tile' _delimiter_ ct_KEYWORD
- 'dimy_tile' _delimiter_ ct_KEYWORD
- 'distance' _delimiter_ ct_KEYWORD
- 'distof' _delimiter_ ct_KEYWORD
- 'done_dialog' _delimiter_ ct_KEYWORD
- 'end_image' _delimiter_ ct_KEYWORD
- 'end_list' _delimiter_ ct_KEYWORD
- 'entdel' _delimiter_ ct_KEYWORD
- 'entget' _delimiter_ ct_KEYWORD
- 'entlast' _delimiter_ ct_KEYWORD
- 'entmake' _delimiter_ ct_KEYWORD
- 'entmakex' _delimiter_ ct_KEYWORD
- 'entmod' _delimiter_ ct_KEYWORD
- 'entnext' _delimiter_ ct_KEYWORD
- 'entsel' _delimiter_ ct_KEYWORD
- 'entupd' _delimiter_ ct_KEYWORD
- 'eq' _delimiter_ ct_KEYWORD
- 'equal' _delimiter_ ct_KEYWORD
- 'eval' _delimiter_ ct_KEYWORD
- 'exit' _delimiter_ ct_KEYWORD
- 'exp' _delimiter_ ct_KEYWORD
- 'expand' _delimiter_ ct_KEYWORD
- 'expt' _delimiter_ ct_KEYWORD
- 'fill_image' _delimiter_ ct_KEYWORD
- 'findfile' _delimiter_ ct_KEYWORD
- 'fix' _delimiter_ ct_KEYWORD
- 'float' _delimiter_ ct_KEYWORD
- 'fnsplitl' _delimiter_ ct_KEYWORD
- 'foreach' _delimiter_ ct_KEYWORD
- 'gc' _delimiter_ ct_KEYWORD
- 'gcd' _delimiter_ ct_KEYWORD
- 'get_attr' _delimiter_ ct_KEYWORD
- 'get_tile' _delimiter_ ct_KEYWORD
- 'getangle' _delimiter_ ct_KEYWORD
- 'getcfg' _delimiter_ ct_KEYWORD
- 'getcname' _delimiter_ ct_KEYWORD
- 'getcorner' _delimiter_ ct_KEYWORD
- 'getdist' _delimiter_ ct_KEYWORD
- 'getenv' _delimiter_ ct_KEYWORD
- 'getfiled' _delimiter_ ct_KEYWORD
- 'getint' _delimiter_ ct_KEYWORD
- 'getkword' _delimiter_ ct_KEYWORD
- 'getorient' _delimiter_ ct_KEYWORD
- 'getpoint' _delimiter_ ct_KEYWORD
- 'getreal' _delimiter_ ct_KEYWORD
- 'getstring' _delimiter_ ct_KEYWORD
- 'getvar' _delimiter_ ct_KEYWORD
- 'graphscr' _delimiter_ ct_KEYWORD
- 'grclear' _delimiter_ ct_KEYWORD
- 'grdraw' _delimiter_ ct_KEYWORD
- 'grread' _delimiter_ ct_KEYWORD
- 'grtext' _delimiter_ ct_KEYWORD
- 'grvecs' _delimiter_ ct_KEYWORD
- 'handent' _delimiter_ ct_KEYWORD
- 'help' _delimiter_ ct_KEYWORD
- 'if' _delimiter_ ct_KEYWORD
- 'initdia' _delimiter_ ct_KEYWORD
- 'initget' _delimiter_ ct_KEYWORD
- 'inters' _delimiter_ ct_KEYWORD
- 'ismnugrploaded' _delimiter_ ct_KEYWORD
- 'itoa' _delimiter_ ct_KEYWORD
- 'lambda' _delimiter_ ct_KEYWORD
- 'last' _delimiter_ ct_KEYWORD
- 'length' _delimiter_ ct_KEYWORD
- 'list' _delimiter_ ct_KEYWORD
- 'listp' _delimiter_ ct_KEYWORD
- 'load' _delimiter_ ct_KEYWORD
- 'load_dialog' _delimiter_ ct_KEYWORD
- 'log' _delimiter_ ct_KEYWORD
- 'logand' _delimiter_ ct_KEYWORD
- 'logior' _delimiter_ ct_KEYWORD
- 'lsh' _delimiter_ ct_KEYWORD
- 'mapcar' _delimiter_ ct_KEYWORD
- 'max' _delimiter_ ct_KEYWORD
- 'mem' _delimiter_ ct_KEYWORD
- 'member' _delimiter_ ct_KEYWORD
- 'menucmd' _delimiter_ ct_KEYWORD
- 'menugroup' _delimiter_ ct_KEYWORD
- 'min' _delimiter_ ct_KEYWORD
- 'minusp' _delimiter_ ct_KEYWORD
- 'mode_tile' _delimiter_ ct_KEYWORD
- 'mtedit' _delimiter_ ct_KEYWORD
- 'mtprop' _delimiter_ ct_KEYWORD
- 'namedobjdict' _delimiter_ ct_KEYWORD
- 'nentsel' _delimiter_ ct_KEYWORD
- 'nentselp' _delimiter_ ct_KEYWORD
- 'new_dialog' _delimiter_ ct_KEYWORD
- 'nil' _delimiter_ ct_KEYWORD
- 'not' _delimiter_ ct_KEYWORD
- 'nth' _delimiter_ ct_KEYWORD
- 'null' _delimiter_ ct_KEYWORD
- 'numberp' _delimiter_ ct_KEYWORD
- 'open' _delimiter_ ct_KEYWORD
- 'or' _delimiter_ ct_KEYWORD
- 'osnap' _delimiter_ ct_KEYWORD
- 'pause' _delimiter_ ct_KEYWORD
- 'polar' _delimiter_ ct_KEYWORD
- 'prin1' _delimiter_ ct_KEYWORD
- 'princ' _delimiter_ ct_KEYWORD
- 'print' _delimiter_ ct_KEYWORD
- 'progn' _delimiter_ ct_KEYWORD
- 'prompt' _delimiter_ ct_KEYWORD
- 'quit' _delimiter_ ct_KEYWORD
- 'quote' _delimiter_ ct_KEYWORD
- 'read' _delimiter_ ct_KEYWORD
- 'read-char' _delimiter_ ct_KEYWORD
- 'read-line' _delimiter_ ct_KEYWORD
- 'redraw' _delimiter_ ct_KEYWORD
- 'regapp' _delimiter_ ct_KEYWORD
- 'rem' _delimiter_ ct_KEYWORD
- 'repeat' _delimiter_ ct_KEYWORD
- 'report' _delimiter_ ct_KEYWORD
- 'reverse' _delimiter_ ct_KEYWORD
- 'rtos' _delimiter_ ct_KEYWORD
- 'set' _delimiter_ ct_KEYWORD
- 'set_tile' _delimiter_ ct_KEYWORD
- 'setcfg' _delimiter_ ct_KEYWORD
- 'setenv' _delimiter_ ct_KEYWORD
- 'setfunhelp' _delimiter_ ct_KEYWORD
- 'setq' _delimiter_ ct_KEYWORD
- 'setvar' _delimiter_ ct_KEYWORD
- 'setview' _delimiter_ ct_KEYWORD
- 'sin' _delimiter_ ct_KEYWORD
- 'slide_image' _delimiter_ ct_KEYWORD
- 'snvalid' _delimiter_ ct_KEYWORD
- 'sqrt' _delimiter_ ct_KEYWORD
- 'ssadd' _delimiter_ ct_KEYWORD
- 'ssdel' _delimiter_ ct_KEYWORD
- 'ssget' _delimiter_ ct_KEYWORD
- 'ssgetfirst' _delimiter_ ct_KEYWORD
- 'sslength' _delimiter_ ct_KEYWORD
- 'ssmemb' _delimiter_ ct_KEYWORD
- 'ssname' _delimiter_ ct_KEYWORD
- 'ssnamex' _delimiter_ ct_KEYWORD
- 'sssetfirst' _delimiter_ ct_KEYWORD
- 'start_dialog' _delimiter_ ct_KEYWORD
- 'start_image' _delimiter_ ct_KEYWORD
- 'start_list' _delimiter_ ct_KEYWORD
- 'startapp' _delimiter_ ct_KEYWORD
- 'strcase' _delimiter_ ct_KEYWORD
- 'strcat' _delimiter_ ct_KEYWORD
- 'strlen' _delimiter_ ct_KEYWORD
- 'subst' _delimiter_ ct_KEYWORD
- 'substr' _delimiter_ ct_KEYWORD
- 't' _delimiter_ ct_KEYWORD
- 'tablet' _delimiter_ ct_KEYWORD
- 'tblnext' _delimiter_ ct_KEYWORD
- 'tblobjname' _delimiter_ ct_KEYWORD
- 'tblsearch' _delimiter_ ct_KEYWORD
- 'term_dialog' _delimiter_ ct_KEYWORD
- 'terpri' _delimiter_ ct_KEYWORD
- 'textbox' _delimiter_ ct_KEYWORD
- 'textpage' _delimiter_ ct_KEYWORD
- 'textscr' _delimiter_ ct_KEYWORD
- 'trace' _delimiter_ ct_KEYWORD
- 'trans' _delimiter_ ct_KEYWORD
- 'type' _delimiter_ ct_KEYWORD
- 'unload_dialog' _delimiter_ ct_KEYWORD
- 'untrace' _delimiter_ ct_KEYWORD
- 'vector_image' _delimiter_ ct_KEYWORD
- 'ver' _delimiter_ ct_KEYWORD
- 'vmon' _delimiter_ ct_KEYWORD
- 'vports' _delimiter_ ct_KEYWORD
- 'wcmatch' _delimiter_ ct_KEYWORD
- 'while' _delimiter_ ct_KEYWORD
- 'write-char' _delimiter_ ct_KEYWORD
- 'write-line' _delimiter_ ct_KEYWORD
- 'xdroom' _delimiter_ ct_KEYWORD
- 'xdsize' _delimiter_ ct_KEYWORD
- 'xload' _delimiter_ ct_KEYWORD
- 'xstrcase' _delimiter_ ct_KEYWORD
- 'xunload' _delimiter_ ct_KEYWORD
- 'zerop' _delimiter_ ct_KEYWORD
-
-
- //--------------------------------------------------------------------------------------------------------------------
- //
- // %%handler section
- //
- // The %%handler section gives rules to be applied once an entry in the %%words table has been recognised. Normally
- // no further processing is required but sometimes a token starts with a fixed set of characters but may be followed
- // by a character class rather than a known sequence.
- //
- // %%handler table entries have 4 columns:
- // Column 1 Token value to be processed
- // Column 2 Character specifier that follows recognised word
- // Column 3 Quoted string specifying end sequence
- // Column 4 Whether end sequence is part of lexeme
- //
- // The <character specifier> is defined as:
- // Column 2 A single character specifier or pre-defined system character macro:
- // _PASCAL_CHAR Pascal style character specifier
- // _C_CHAR C style character specifier
- // If the lexeme can optionally have these characters then append '?' to the end
- // of the quoted string.
- // Column 3 Up to 2 characters may be given as a sequence to terminate the lexeme.
- // Characters are specified using a simplified regular expression. If this
- // string is empty then the lexeme will never be matched.
- //
- %%handler
- ct_COMMENT_LINE '[^\n]'? '\n' _discard_
- ct_COMMENT_STAR _all_chars_? '|;' _use_
-
- //--------------------------------------------------------------------------------------------------------------------
- //
- // %%tokens section
- //
- // Used to specify how to recognise non-fixed lexemes. Non-fixed lexemes are only tried if the table entries in the
- // %%words section have failed. The non-fixed lexeme is defiened by 5 columns as below:
- // Column 1 Token value
- // Column 2 Single start character specifier
- // Column 3 Single contains character specifier
- // Column 4 End sequence specifier
- // Column 5 Whether end sequence is part of lexeme
- // Pre-defined token styles are implemented. If used they should be specified in Column 2. The implemented ones
- // are:
- // __STD_PASCALSTRING Pascal string -- starts with ' ands with ' and uses '' to represent
- // ' within a string. Does not extend beywond end of line.
- // __STD_IDENTIFIER Standard identifier. Starts with [_a-zA-Z], contains [_a-zA-Z0-9] and ends with
- // a non-alpha numeric character that is not part of the lexeme
- // __STD_NUMBER_OR_FP Integer or floating point constant of syntax:
- // <Digit String> [ '.' <Digit string> ] [ e|E [+-] <Digit string> ]
- //
- %%tokens
- ct_STRING __STD_C_STRING
- ct_IDENTIFIER __STD_IDENTIFIER
- ct_NUMBER __STD_C_NUMBER_OR_FP_SIGNED
-
- //--------------------------------------------------------------------------------------------------------------------
- //
- // %%effects section
- //
- // Used to specify the default colors and font styles used for each token
- //
- // Column 1 Token value
- // Column 2 Font styles
- // Column 3 Foreground color
- // Column 4 Background color
- // Column 5 Optional column specifying whether map entry is a 'hotspot'
- //
- // Columns 1-4 must be completed for all rows, Column 5 defaults to non-hotspot.
- //
- %%effects
- ct_DEFAULT [fsBold] clWhite _DEFAULT_BACKGROUND
- ct_IDENTIFIER [fsBold] clYellow _DEFAULT_BACKGROUND
- ct_STRING [fsbold] clAqua _DEFAULT_BACKGROUND
- ct_COMMENT [fsItalic] clSilver _DEFAULT_BACKGROUND
- ct_KEYWORD [fsBold] clWhite _DEFAULT_BACKGROUND
- ct_NUMBER [fsBold] clLime _DEFAULT_BACKGROUND
- ct_MISC [fsBold] clWhite _DEFAULT_BACKGROUND
-
-
- //--------------------------------------------------------------------------------------------------------------------
- //
- // %%map section
- //
- // Used to specify which entry in the %%effects table each token value uses. By default all token values map onto
- // __DEFAULT_TOKEN which is defined as zero. Table has 2 columns:
- // Column 1 Recognised token value
- // Column 2 Map table entry (i.e. %%effects table entry)
- // Normally the %%map table consists of identical value entries.
- %%map
- ct_IDENTIFIER ct_IDENTIFIER
- ct_STRING ct_STRING
- ct_NUMBER ct_NUMBER
- ct_COMMENT ct_COMMENT
- ct_COMMENT_LINE ct_COMMENT
- ct_COMMENT_STAR ct_COMMENT
- ct_KEYWORD ct_KEYWORD
- ct_MISC ct_MISC
- ct_OPERATOR ct_MISC
-
- /*
- ;; Problems:
- ;; A one-line comment begins with a single semi colon, not
- ;; two semi-colons:
-
- ; This line should be commented out
-
- ;; Leading +/- on numbers is not same color as number
- ;; (this seems to be related to the next item). There
- ;; are four numbers on the next line.
-
- +25 -17 32.5 -4.25
-
- ;; The following line contains four identifiers:
-
- áááá /5á \4á >32á *25
-
- ;; LISP Symbols (identifiers) that are prefixed with a one-
- ;; character reserved word (like +, -, >, etc) are being
- ;; displayed improperly. The reserved word prefix is actually
- ;; part of the identifer, not a seperate element, and hence,
- ;; it should have the same color:
-
- ááá +foo ;; the symbol '+FOO'
- ááá >Sáá ;; the symbol '>S'
- ááá >==< ;; The symbol '>==<'
- ááá
- ;; The exclaimation point is not a symbol or reserved word:
- áááá
- ááá !hello
- ááá
- ;; Ditto for the first character of each of these:
-
- ááá %fileá &LAYER [PREV] ]NEXT
-
- ;; The following line contains the symbol 'read-record',
- ;; but 'read-' is being treated incorrectly ('read' is a
- ;; reserved word, and so is '-', it seems that one-character
- ;; reserved words are being treated as if they themselves
- ;; are also delimiters - but they are not):
-
- ááá read-record
-
- ;; This is for starters, more comments to come.
-
- */
-
-